// 3-5 预处理器-C++ 中的预定义宏

/**
 * C++ 预处理器
 * 预处理器是一些指令，指示编译器在实际编译之前所需完成的预处理。

 * 所有的预处理器指令都是以井号（#）开头，只有空格字符可以出现在预处理指令之前。预处理指令**不是 C++ 语句**，所以它们不会以分号（;）结尾。

 * 我们已经看到，之前所有的实例中都有 #include 指令。这个宏用于把头文件包含到源文件中。

 * C++ 还支持很多预处理指令，比如 #include、#define、#if、#else、#line 等，让我们一起看看这些重要指令。
 *
 * --------------------------------------
 * C++ 中的预定义宏
 * C++ 提供了下表所示的一些预定义宏：

      宏	       描述
    __LINE__	  这会在程序编译时包含当前行号。
    __FILE__	  这会在程序编译时包含当前文件名。
    __DATE__	  这会包含一个形式为 month/day/year 的字符串，它表示把源文件转换为目标代码的日期。
    __TIME__	  这会包含一个形式为 hour:minute:second 的字符串，它表示程序被编译的时间。

 * 让我们看看上述这些宏的实例：
*/

#include <iostream>
#define __mark 1

/**
 * #1
*/
#if 1 == __mark
int main(void)
{
  std::cout << "value of __LINE__ : " << __LINE__ << std::endl; // 35
  std::cout << "value of __FILE__ : " << __FILE__ << std::endl; // e:\CodeField\Code_Cpp\C_Single\study\day17\3_preprocessor\3_5.cpp
  std::cout << "value of __DATE__ : " << __DATE__ << std::endl; // Oct  5 2021
  std::cout << "value of __TIME__ : " << __TIME__ << std::endl; // 17:07:00
  printf("---------------end------------------\n");
  return 0;
}
/**
 * #2 
*/
#elif 2 == __mark
int main(void)
{

  printf("---------------end------------------\n");
  return 0;
}
#endif